package com.fypg.module.blooddonation.api.client.dal.bloodStation;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;


/**
 * 基础请求对象
 * 所有第三方接口请求的基类，包含统一的请求头和加密数据
 *
 * @param <T> 业务数据泛型
 * @author 系统生成
 */
@Data
@Schema(description = "基础请求对象")
public class BaseRequest<T> {

    /**
     * 请求头信息
     */
    @Schema(description = "请求头信息")
    private RequestHead head;

    /**
     * 加密的业务数据
     * 使用SM4算法加密的JSON字符串
     */
    @Schema(description = "加密的业务数据（SM4加密）")
    private T data;

    /**
     * 构造函数
     *
     * @param accessKey 访问密钥
     * @param data 业务数据对象
     */
    public BaseRequest(String accessKey, T data) {
        // 初始化请求头
        this.head = new RequestHead();
        this.head.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        this.head.setRequestHead(new RequestHeadDetail());
        this.head.setAccessAuth(new AccessAuth(accessKey));
        this.data = data;
    }

    /**
     * 无参构造函数（用于反序列化）
     */
    public BaseRequest() {
        // 用于JSON反序列化
    }
}
